# AIDE 数据库管理脚本 (Windows PowerShell 版本)
# 用于控制数据库的清除和重置操作

# 设置错误处理
$ErrorActionPreference = "Stop"

Write-Host "======================================" -ForegroundColor Blue
Write-Host "AIDE 数据库管理工具" -ForegroundColor Blue
Write-Host "======================================" -ForegroundColor Blue
Write-Host ""

# 检查 .env.prod 文件是否存在
if (-not (Test-Path ".env.prod")) {
    Write-Host "❌ 错误: .env.prod 文件不存在" -ForegroundColor Red
    Write-Host "请先复制 env-prod-template.txt 到 .env.prod 并配置相应的值" -ForegroundColor Yellow
    exit 1
}

# 显示当前配置
Write-Host "📋 当前配置:" -ForegroundColor Blue
$envContent = Get-Content ".env.prod" -Raw
if ($envContent -match "CLEAR_DATABASE_DATA=true") {
    Write-Host "   数据清除: 启用 (⚠️ 危险)" -ForegroundColor Red
} else {
    Write-Host "   数据清除: 禁用 (安全)" -ForegroundColor Green
}
Write-Host ""

# 主菜单
Write-Host "请选择操作:" -ForegroundColor Blue
Write-Host "1) 🔄 正常重启服务 (保留数据)"
Write-Host "2) 🗑️  清除数据并重启服务 (⚠️ 危险操作)"
Write-Host "3) ⚙️  查看当前数据清除设置"
Write-Host "4) 📝 修改数据清除设置"
Write-Host "5) ❌ 退出"
Write-Host ""

$choice = Read-Host "请输入选择 (1-5)"

switch ($choice) {
    "1" {
        Write-Host "🔄 正常重启服务 (保留现有数据)..." -ForegroundColor Green
        
        # 确保 CLEAR_DATABASE_DATA 设置为 false
        $envContent = Get-Content ".env.prod" -Raw
        if ($envContent -match "CLEAR_DATABASE_DATA=") {
            $envContent = $envContent -replace "CLEAR_DATABASE_DATA=.*", "CLEAR_DATABASE_DATA=false"
        } else {
            $envContent += "`nCLEAR_DATABASE_DATA=false"
        }
        $envContent | Set-Content ".env.prod"
        
        Write-Host "正在重新构建并启动服务..." -ForegroundColor Blue
        docker-compose -f docker-compose.prod.yml -f docker-compose.windows.yml --env-file .env.prod up -d --build
        
        Write-Host "✅ 服务已启动，数据已保留" -ForegroundColor Green
    }
    
    "2" {
        Write-Host "⚠️  警告: 此操作将清除所有数据库数据！" -ForegroundColor Red
        Write-Host "包括: 任务、用户、重复任务、统计数据等所有内容" -ForegroundColor Yellow
        Write-Host ""
        $confirm = Read-Host "确定要继续吗？输入 'YES' 确认"
        
        if ($confirm -eq "YES") {
            Write-Host "🗑️ 设置数据清除模式并重启服务..." -ForegroundColor Red
            
            # 设置 CLEAR_DATABASE_DATA 为 true
            $envContent = Get-Content ".env.prod" -Raw
            if ($envContent -match "CLEAR_DATABASE_DATA=") {
                $envContent = $envContent -replace "CLEAR_DATABASE_DATA=.*", "CLEAR_DATABASE_DATA=true"
            } else {
                $envContent += "`nCLEAR_DATABASE_DATA=true"
            }
            $envContent | Set-Content ".env.prod"
            
            Write-Host "正在重新构建并启动服务 (清除数据模式)..." -ForegroundColor Blue
            docker-compose -f docker-compose.prod.yml -f docker-compose.windows.yml --env-file .env.prod up -d --build
            
            # 等待服务启动完成
            Write-Host "等待服务启动完成..." -ForegroundColor Blue
            Start-Sleep -Seconds 10
            
            # 重置回 false，避免下次意外清除数据
            $envContent = Get-Content ".env.prod" -Raw
            $envContent = $envContent -replace "CLEAR_DATABASE_DATA=.*", "CLEAR_DATABASE_DATA=false"
            $envContent | Set-Content ".env.prod"
            
            Write-Host "✅ 数据已清除，服务已启动" -ForegroundColor Green
            Write-Host "💡 数据清除设置已自动重置为 false，防止意外清除" -ForegroundColor Yellow
        } else {
            Write-Host "操作已取消" -ForegroundColor Blue
        }
    }
    
    "3" {
        Write-Host "📊 当前数据清除设置:" -ForegroundColor Blue
        $envContent = Get-Content ".env.prod" -Raw
        if ($envContent -match "CLEAR_DATABASE_DATA=true") {
            Write-Host "   状态: 启用 (下次启动将清除数据)" -ForegroundColor Red
            Write-Host "   ⚠️ 建议设置为 false 以防意外数据丢失" -ForegroundColor Yellow
        } elseif ($envContent -match "CLEAR_DATABASE_DATA=false") {
            Write-Host "   状态: 禁用 (数据安全)" -ForegroundColor Green
        } else {
            Write-Host "   状态: 未设置 (默认禁用)" -ForegroundColor Yellow
        }
    }
    
    "4" {
        Write-Host "📝 修改数据清除设置" -ForegroundColor Blue
        Write-Host "1) 禁用数据清除 (推荐)"
        Write-Host "2) 启用数据清除 (⚠️ 危险)"
        Write-Host ""
        $settingChoice = Read-Host "请选择 (1-2)"
        
        switch ($settingChoice) {
            "1" {
                $envContent = Get-Content ".env.prod" -Raw
                if ($envContent -match "CLEAR_DATABASE_DATA=") {
                    $envContent = $envContent -replace "CLEAR_DATABASE_DATA=.*", "CLEAR_DATABASE_DATA=false"
                } else {
                    $envContent += "`nCLEAR_DATABASE_DATA=false"
                }
                $envContent | Set-Content ".env.prod"
                Write-Host "✅ 数据清除已禁用" -ForegroundColor Green
            }
            "2" {
                Write-Host "⚠️ 警告: 启用此设置后，下次服务启动时将清除所有数据！" -ForegroundColor Red
                $confirm = Read-Host "确定要启用吗？输入 'YES' 确认"
                if ($confirm -eq "YES") {
                    $envContent = Get-Content ".env.prod" -Raw
                    if ($envContent -match "CLEAR_DATABASE_DATA=") {
                        $envContent = $envContent -replace "CLEAR_DATABASE_DATA=.*", "CLEAR_DATABASE_DATA=true"
                    } else {
                        $envContent += "`nCLEAR_DATABASE_DATA=true"
                    }
                    $envContent | Set-Content ".env.prod"
                    Write-Host "⚠️ 数据清除已启用！下次启动服务时将清除所有数据" -ForegroundColor Red
                } else {
                    Write-Host "操作已取消" -ForegroundColor Blue
                }
            }
            default {
                Write-Host "无效选择" -ForegroundColor Red
            }
        }
    }
    
    "5" {
        Write-Host "退出" -ForegroundColor Blue
        exit 0
    }
    
    default {
        Write-Host "无效选择，请输入 1-5" -ForegroundColor Red
        exit 1
    }
}

Write-Host ""
Write-Host "======================================" -ForegroundColor Blue
Write-Host "操作完成" -ForegroundColor Blue
Write-Host "======================================" -ForegroundColor Blue
